package NGUYENVANDOAN.OOP.EXCERCISES.LEVEL02.EX01_OPTIONAL;

public class CONTROLLERS {

    /***
     * Nghiệp vụ tính diện tích cho các đối tượng hình học
     * @param shOpt
     * + shOpt = 0: Hình tam giác
     * + shOpt = 1: Hình bát giác
     * + shOpt = 2: Hình vuông
     * + shOpt = 3: Hình chữ nhật
     * @param objMetric - Đối tượng hình học (có thể là Tam giác, bát giác,...)
     * @return - Giá trị diện tích của đối tượng hình đó
     */
    public double Area(short shOpt, Object objMetric) {
        double results = 0;
        switch (shOpt) {
        /* TH: Hình tam giác */
        case 0: {
            // Tường minh ép kiểu về Object tương ứng
            TriangleEntity objTringle = (TriangleEntity) objMetric;
            // float a = (float)2.5;

            // Tính diện tích tam giác
            results = objTringle.Area(objTringle);
        }
            break;

        /* TH: Hình bát giác */
        case 1: {
            // Tường minh ép kiểu về Object tương ứng
            Octagon objOctogon = (Octagon) objMetric;

            // Tính diện tích hình bát giác
            results = objOctogon.Area(objOctogon);
        }
            break;

        /* TH: Hình vuông */
        case 2: {
            // Tường minh ép kiểu về Object tương ứng
            SquareEntity objSquere = (SquareEntity) objMetric;

            // Tính diện tích hình bát giác
            results = objSquere.Area(objSquere);
        }
            break;

        /* TH: Hình chữ nhật */
        case 3: {
            // Tường minh ép kiểu về Object tương ứng
            RectangleEntity objRectangle = (RectangleEntity) objMetric;

            // Tính diện tích hình bát giác
            results = objRectangle.Area(objRectangle);
        }
            break;
        }
        return results;
    }

    /***
     * Nghiệp vụ tính chu vi cho các đối tượng hình học
     * @param shOpt
     * + shOpt = 0: Hình tam giác
     * + shOpt = 1: Hình bát giác
     * + shOpt = 2: Hình vuông
     * + shOpt = n: Hình n
     * @param objMetric - Đối tượng hình học (có thể là Tam giác, bát giác,...)
     * @return - Giá trị chu vi của đối tượng hình đó
     */
    public double Perrimetter(short shOpt, Object objMetric) {
        double results = 0;
        switch (shOpt) {
        /* TH: Hình tam giác */
        case 0: {
            // a. Tường minh ép kiểu về Object tương ứng
            TriangleEntity objTringle = (TriangleEntity) objMetric;

            // b. Tính chu vi cho hình Tam Giác
            results = objTringle.Perrimeter(objTringle);
        }
            break;
        }
        return results;
    }
}
